﻿using System.ComponentModel;
using Ops.Mpc.States;
using Ops.Mpc.Collections;
using Ops.Mpc.Presenters;
using System.Collections.Generic;
using Ops.Mpc.Models;

namespace Ops.Mpc.Controllers
{
    public interface IController : INotifyPropertyChanged
    {
        IState CurrentState { get; }
        void SetCurrentState(string stateName);
        Presenter Presenter { get; set; }
        Model GetModel(string itemName);
        StateAction GetStateAction(string itemName);
        T GetModel<T>(string ItemName) where T : Model;
        T GetModel<T>() where T : Model;
        NamedItemCollection<Model> Models { get; }
        NamedItemCollection<State> States { get; }
        List<StateTransition> StateTransitions { get; }
        IStateAction GetParentStateAction(string stateActionName);
        string GetStatePath(string delimiter);
        void ExecuteStateAutoRun();
        void Start();
        void Stop();
        void ExecuteCommand(string commandName, object commandArgument = null);
        bool IsStopped { get; }



    }
}
